[r3]: / trunk / json / json-pac / Data Types / JSONVAR / FB_Init / svnobj  Maximize  Restore  History

Download this file

58 lines (57 with data), 15.5 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
METHOD FB_Init : BOOL
VAR_INPUT
split the variable path into an array, and determine some object characteristics
========================================================================================================*)
		IF FIND(STR1:= _VarNameArray[VarNameIndex].Name, STR2:= '_') = 1 THEN
		//check if this is an array, if yes then remove the array index from the variable name
		endarraystr:= FIND(STR1:= _VarNameArray[VarNameIndex].Name, STR2:= ']');
		IF (startarraystr <> 0) AND (endarraystr <> 0) THEN
			_VarNameArray[VarNameIndex].ArrayIndex:= STRING_TO_UINT(MID(
				STR:= _VarNameArray[VarNameIndex].Name, 
				LEN:= endarraystr-startarraystr-1, 
				POS:= startarraystr+1
			));
			_VarNameArray[VarNameIndex].Name:= Standard.DELETE(
				LEN:= endarraystr-startarraystr+1, 
				POS:= startarraystr
			);
		IF (_VarNameArray[VarNameIndex].Name = 'Application') THEN
		//was this the application level?	
		VarNameEnd:= VarNameBegin - 2;	//end of the next variable names is known, store for next loop			
		StringIndex:= VarNameBegin - 2;
	ELSE
		StringIndex:= StringIndex - 1;
	END_IF
END_WHILE
//figure out whether this variable is the first value of a new JSON object, or if the previous variable is the last value of a JSON object
IF __ISVALIDREF(PrevNameArray) THEN
	offset:= _ParentVar - PrevParentVar;	//check if the variable names have shifted up or down
	IF (offset < 0) THEN
	//objects shifted down
		stoploop:= PrevParentVar - 1;
		startloop:= 1;
	//no shift, or shift up
		stoploop:= _ParentVar - 1;
		startloop:= offset + 1;
	FOR varlevelindex:= startloop TO stoploop DO
		prevvarlevelindex:= varlevelindex - offset;
		IF (offset < 0) AND (varlevelindex = 1) THEN
		IF ((varlevelindex-offset) > 1) AND ((_VarNameArray[varlevelindex].Name <> PrevNameArray[prevvarlevelindex].Name) OR (_VarNameArray[varlevelindex].ArrayIndex <> PrevNameArray[prevvarlevelindex].ArrayIndex)) THEN
		//end previous object
		IF (PrevNameArray[prevvarlevelindex].ArrayIndex > 0) AND (_VarNameArray[varlevelindex].Name <> PrevNameArray[prevvarlevelindex].Name) THEN
		//end array
			PrevNameArray[prevvarlevelindex].EndArray:= TRUE;
		END_IF		
		IF (varlevelindex > 1) AND ((NOT _VarNameArray[varlevelindex].NewArray) AND (_VarNameArray[varlevelindex].Name <> PrevNameArray[prevvarlevelindex].Name) OR (_VarNameArray[varlevelindex].ArrayIndex <> PrevNameArray[prevvarlevelindex].ArrayIndex)) THEN
		//new object
//invalid reference to PrevNameArray, this must be the first variable
	FOR varlevelindex:= 1 TO _ParentVar-1 DO
		IF (varlevelindex > 1) THEN
		//every level above 1 will be a new object
			_VarNameArray[varlevelindex].NewObject:= TRUE;
		IF (_VarNameArray[varlevelindex].ArrayIndex = 1) THEN
		END_IF			
END_IF
//set a reference to some variables for the next JSON variable
PrevNameArray REF= _VarNameArray;
PrevParentVar REF= _ParentVar;